import path from 'path';
import {
  ConfigEnv,
  defineConfig,
  UserConfig
} from 'vite';
// 生产gz文件
import viteCompression from 'vite-plugin-compression';
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons';
// 增加 vue文件 script name值
import vueSetupExtend from 'vite-plugin-vue-setup-extend';

// vite.config.ts中无法使用import.meta.env 所以需要引入
import vue from '@vitejs/plugin-vue';

var hash = new Date().getTime();

// 自动按需加载,需要去安装组件  "unplugin-auto-import": "^0.10.3",  "unplugin-vue-components": "^0.21.2",  "unplugin-vue-define-options": "^0.7.3",
// import AutoImport from 'unplugin-auto-import/vite'
// import Components from 'unplugin-vue-components/vite'
//import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'

function resolve(dir) {
  return path.join(__dirname, '.', dir)
}

// https://vitejs.dev/config/
export default defineConfig(({ mode }: ConfigEnv): UserConfig => {
  return {
    // base: mode === 'production' ? '/wz-front-read' : '/',
    // base: '/wz-front-read',
    define: {
      // enable hydration mismatch details in production build
      __VUE_PROD_HYDRATION_MISMATCH_DETAILS__: 'true'
    },
    plugins: [vue(),
    vueSetupExtend(),
    // AutoImport({
    //   resolvers: [ElementPlusResolver()],
    // }),
    // Components({
    //   resolvers: [ElementPlusResolver()],
    // }),
    // * 使用 svg 图标
    createSvgIconsPlugin({
      // 指定需要缓存的图标文件夹
      iconDirs: [path.resolve(process.cwd(), 'src/icons/svg')],
      // 指定symbolId格式
      symbolId: 'icon-[dir]-[name]',
    }),
    // gzip压缩 生产环境生成 .gz 文件
    mode === 'production' && viteCompression({
      verbose: true,
      disable: false,
      threshold: 10240,
      algorithm: 'gzip',
      ext: '.gz',
    }),
    ],
    css: {
      preprocessorOptions: {
        scss: {
          additionalData: `@use "./src/styles/index.scss" as *;`
        }
      }
    },
    // 配置别名
    resolve: {
      alias: {
        '@': resolve('src'),
        '~': resolve('public'),
      },
      // 忽略后缀名的配置选项, 添加 .vue 选项时要记得原本默认忽略的选项也要手动写入
      extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue'],
    },
    //启动服务配置
    server: {
      // 服务器主机名，如果允许外部访问，可设置为 "0.0.0.0" 也可设置成你的ip地址
      host: '0.0.0.0',
      port: 8090,
      // open: true,
      https: false,
      cors: true,
      // 代理跨域（模拟示例）
      proxy: {
        // "/api": {
        //   target: "",
        //   changeOrigin: true,
        //   rewrite: path => path.replace(/^\/api/, "")
        // },
        // "/hjw-upms": {
        //   target: "http://192.168.251.217",
        //   changeOrigin: true,
        //   rewrite: path => path.replace(/^\/hjw-upms/, "/hjw-upms")
        // },
        // "/hjw-auth": {
        //   target: "http://192.168.251.217",
        //   changeOrigin: true,
        //   rewrite: path => path.replace(/^\/hjw-auth/, "/hjw-auth")
        // },
        // "/xh-booksmanager": {
        //   target: "http://192.168.251.217",
        //   changeOrigin: true,
        //   rewrite: path => path.replace(/^\/xh-booksmanager/, "/xh-booksmanager")
        // },
        // "/hjw-collect": {
        //   target: "http://192.168.251.217",
        //   changeOrigin: true,
        //   rewrite: path => path.replace(/^\/hjw-collect/, "/hjw-collect")
        // },
        // "/xh-bookstore": {
        //   target: "http://192.168.251.217",
        //   changeOrigin: true,
        //   rewrite: path => path.replace(/^\/xh-bookstore/, "/xh-bookstore")
        // },
        // "/dvp-screen": {
        //   target: "http://192.168.251.8:6767",
        //   changeOrigin: true,
        //   rewrite: path => path.replace(/^\/dvp-screen/, "/dvp-screen")
        // },
      }
    },
    // 生产环境打包配置
    //去除 console debugger
    esbuild: {
      pure: mode === 'production' ? ["debugger"] : []
      // pure: mode === 'production' ? ["console.log", "debugger"] : []
    },
    build: {
      // terserOptions: {
      //   compress: {
      //     drop_console: true,
      //     drop_debugger: true,
      //   },
      // },
      outDir: 'wz-front-read',//配置编译或文件名称
      sourcemap: false,//编译后允许生产map文件
      // reportCompressedSize: true,
      rollupOptions: {
        output: {//在这里修改静态资源路径
          // chunkFileNames: `static/assets/js/[name]-[hash].js`,
          // entrvFileNames: 'static/assets/js/[name]-[hash].js',
          // assetFileNames: 'static/assets/[ext]/[name]-[hash].[ext]',
          chunkFileNames: `static/assets/js/[name].${hash}.js`,
          assetFileNames: `static/assets/[ext]/[name].${hash}.[ext]`
        }
      }
    }
  }
})
